home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Inside!
/
Amiga FD Inside (1995)(Ultramax).iso
/
forumamiga
/
ausgabe09
/
texte
/
copymem
< prev
next >
Wrap
Text File
|
1992-09-05
|
2KB
|
42 lines
André Voget
Die Exec-Routine "CopyMem"
~~~~~~~~~~~~~~~~~~~~~~~~~~
Wie bekannt sein dürfte, kann man in Gfa-Basic alle Library-Routinen mit
Namen aufrufen. Seltsamerweise ist dies nicht möglich, wenn man die
"CopyMem"-Routine aus der Exec-Library benutzen will! Diese kann nämlich
als Ersatz für den "BMOVE"-Befehl von Gfa-Basic dienen. Als Lösung stel
le ich eine Unterroutine vor, die die CopyMem()-Routine aufruft. Die
Parameter sind dieselben wie beim "BMOVE"-Befehl:
von_adr% = Adresse des Quellbereiches
bis_adr% = Adresse des Zielbereiches
anzahl% = Größe des zu kopierenden Speicherbereiches in Bytes
Um die Routine nutzen zu können, muß vorher im Hauptprogramm
"DIM m68%(15)" stehen! Hier ist sie:
PROCEDURE copymem(von_adr%,bis_adr%,anzahl%)
m68%(0)=anzahl%
m68%(8)=von_adr%
m68%(9)=bis_adr%
m68%(14)=LONG{4} ! Execbase
RCALL LONG{4}-624,m68%() ! CopyMem()
RETURN
Von dieser Systemroutine gibt es auch eine "Quick"-Variante, die den
Speicher viel schneller verschiebt. ACHTUNG: die Adressen des Quell-und
des Zielbereiches müssen bei "CopyMemQuick" an Speicherbereiche, die
durch vier teilbar sind, liegen, ansonsten droht eine Guru Meditation!
Um sicherzugehen, sollte man sich den Speicher mit "AllocMem" oder dem
"MALLOC"-Befehl beschaffen, da deren Speicher an einer durch acht teil
baren Adresse liegt. Hier die "Quick"-Variante:
PROCEDURE copymemquick(von_adr%,bis_adr%,anzahl%)
m68%(0)=anzahl%
m68%(8)=von_adr%
m68%(9)=bis_adr%
m68%(14)=LONG{4} ! Exec-Library-Adresse
RCALL LONG{4}-630,m68%() ! CopyMemQuick()
RETURN